/**
 * 罗马数字转数字  range from 1 to 3999
 * 规则
 * 1.重复次数：一个罗马数字符号重复几次,就表示这个数的几倍,I,V,D,X...等等数字字符串所代表的含义
 * 2.右加左减：一个代表大数字的符号右边附一个代表小数字的符号,就表示大数字加小数字
 * 3.上加横线：在罗马数字上加一横线,表示这个数字的一千倍，暂时不需要处理
 */

var obj = {
    'I': 1,
    'V': 5,
    'X': 10,
    'D': 500,
    'M': 1000,
    'L': 50,
    'C': 100
}
var romanToInt = function (s) {
    return Array.from(s).reduce((sum, value, index, arr) => {
        let prev = arr[index - 1]
        let _prev = obj[_prev]
        if (isNaN(_prev) || isNaN(obj[value])) {
            console.error('is a error ', value, prev)
            return sum
        }
        if (obj[value] > _prev) {
            sum = sum - _prev - _prev
        }
        sum = (obj[value] || 0) + sum
        return sum
    }, 0)

};